package c05面向对象;

public class 内部类与外部类互相访问对方成员测试 {
	private int i = 0; //内部类可以访问外部类中private成员
	static int si = 0;

	public void m() {
//		pi();//不能直接访问非静态内部类的成员！
		new In().pi();//应该通过非静态内部类的对象来访问其成员！

//		psi();//同样不能直接访问静态内部类的成员！
		Ins.spsi();//可以通过静态内部类来访问类成员。
		new Ins().psi();//通过静态内部类对象来访问其实例成员。
	}

	//非静态内部类：可以直接访问外部类的静态和非静态成员！
	class In {
		public void pi() {
			System.err.println(i);
		}

		public void psi() {
			System.err.println(si);
		}
	}

	//静态内部类：只能直接访问外部类的静态成员！
	static class Ins {
		//		public void pi(){System.err.println(i);}//错误！！
		public void psi() {
			System.err.println(si);
		}

		//		public static void spi(){System.err.println(i);}//错误！！
		public static void spsi() {
			System.err.println(si);
		}
	}

}
